package com.Abstract;

/**
 * @Author 小闽
 * @Date 2024/9/11 11:14
 * @PackageName: com.Abstract
 * @ClassName: AbstractDetail02
 * @Description: 抽象方法细节
 * @Version 1.0
 */
public class AbstractDetail02 {
    public static void main(String[] args) {

    }
}
//抽象类可以有任意成员【抽象类本质还是类】，比如：非抽象方法、构造器、静态属性等等
abstract class B{
    // 抽象类中的非抽象方法
    public void test(){
        System.out.println("这是抽象类中的非抽象方法...");
    }

    /**
     * 构造方法（无参）
     */
    public B() {
        System.out.println("这是抽象类中的无参构造方法");
    }
    // 抽象类中的静态属性/成员
    private static int n1 = 100;
    // 抽象方法
    public abstract void test1();
}

abstract class C{
    // 抽象方法test2()
    public abstract void test2();
    // 抽象方法test3()
    public abstract void test3();
}
//如果一个类继承了抽象类，则它必须实现抽象类的所有抽象方法，除非它自己也声明为abstract类。
// 第一种方式，子类也声明为抽象类
abstract class D extends C{

}
// 第二种方式，子类实现父类的抽象方法
class E extends C{
    // 实现父类的test2方法
    @Override
    public void test2() {

    }
    // 实现父类的test3方法
    @Override
    public void test3() {

    }
}
//抽象方法不能使用private、final和static来修饰，因为这些关键字都是和重写相违背的。
abstract class F{
    // 私有的方法无法被子类重写或使用
//    private abstract void test5();
//    final关键字是最终的，子类也无法使用或重写
//      public final abstract void test5();
//      public static abstract void test5();
}


